'use strict';

import $const from './dict-const';

/**
 * 查询可变的数据字典
 *
 * @param key 数据字典-唯一KEY
 * @returns {any} 数据字典对象
 */
const findVariableDict = key => {
  let dict = undefined;
  let files = require.context('./variable', true, /dict\-[A-Za-z]*\.js$/);
  files.keys().forEach(name => {
    let obj = files(name);
    if (obj && obj.default && obj.default.DICT_KEY === key) {
      dict = obj.default;
    }
  });
  if (!dict) {
    console.error('找不到数据字典，请确认数据字典唯一标识是否正确');
  }
  return dict;
};

/**
 * 获取数据字典数据
 *
 * @param key 数据字典-唯一KEY
 * @returns {Promise<unknown>} 字典对象列表
 */
export const getData = key => {
  let list = $const[key];
  if (list) {
    return Promise.resolve(list);
  }
  let dict = findVariableDict(key);
  if (dict && dict.getData) {
    return dict.getData();
  }
  return Promise.reject();
};

/**
 * 刷新数据字典数据
 *
 * @param key 数据字典-唯一KEY
 * @returns {Promise<unknown>} 字典对象列表
 */
export const refresh = key => {
  let data = $const[key];
  if (data) {
    return Promise.resolve(data);
  }
  let dict = findVariableDict(key);
  if (dict && dict.refresh) {
    return dict.refresh();
  }
  return Promise.reject();
};

// 导出默认对象
export default {
  getData,
  refresh
};
